package com.demo13_罗马数字转整数;

/*
字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

 */

import java.util.ArrayList;
import java.util.Arrays;

/**
 * 思路分析:
 *        1.把字符串改为字符数组
 *        2.对字符数组的长度进行判断
 *             2.1 如果等于1,直接转换
 *             2.2 如果>1,继续判断
 *        3.从头遍历,需要两个指针. 如果当前值>= 下一个值, 那么直接转换该内容. 向后移动一位.
 *                             如果当前值<下一个值, 那么,将用下一个值, 减去当前的值,得一个结果. 向后移动两位.
 *
 *        4.如果后一个指针指向最后一个元素,代表遍历结束.
 */
public class Text1 {
    public int romanToInt(String s) {
        //1.把字符串转为字符数组
        char[] chars = s.toCharArray();
        //2.如果长度等于1
        if(s.length()==1){
            return reflect(chars[0]);
        }
        //3.创建一个集合用于装获得的结果.
        ArrayList<Integer> list = new ArrayList<>();
        //4.如果长度大于1

        for (int i = 0; i < chars.length; i++) {
            //判断当前值是否是最后一个
            if(i==chars.length-1){
                list.add(reflect(chars[i]));
                break;
            }
            //4.1 如果当前值>= 下一个值
            if(reflect(chars[i])>=reflect(chars[i+1])){
                list.add(reflect(chars[i]));
            }
            //4.2 如果当前值<下一个值
            if (reflect(chars[i])<reflect(chars[i+1])){
                list.add((reflect(chars[i+1])-reflect(chars[i])));
                i++;
            }
        }
        //5.将集合中的数进行一个累加
        int total=0;
        for (int i = 0; i < list.size(); i++) {
            total+=list.get(i);
        }

        return total;
    }
    //映射方法
    public int reflect(char r){
        switch (r){
            case 'I':
                return 1;
            case 'V':
                return 5;
            case 'X':
                return 10;
            case 'L':
                return 50;
            case 'C':
                return 100;
            case 'D':
                return 500;
            case 'M':
                return 1000;
        }
        return 0;
    }
}
